// ProjectName: go-learn-demo
// PackageName: server
// Description:
// Author: hy.bai
// Date: 2025-08-16 星期六 16:34

package main

import (
	"fmt"
	"log/slog"
	"net/http"
)

func handleHome(resp http.ResponseWriter, req *http.Request) {
	url := req.URL
	fmt.Printf("请求的url地址是:%s", url.String())
	// 把数据写入resp结果中，响应给前端
	fmt.Fprintf(resp, "hello world")
}

// 自定义Handler，实现了http.Handler接口
type ybxbHandler struct {
}

func (*ybxbHandler) ServeHTTP(resp http.ResponseWriter, req *http.Request) {
	url := req.URL
	fmt.Printf("请求的url地址是:%s", url.String())
	// 把数据写入resp结果中，响应给前端
	fmt.Fprintf(resp, "首页")
}

func main() {

	// 注册请求方式1
	http.HandleFunc("/home", handleHome)

	// 注册请求方式2
	http.Handle("/", &ybxbHandler{})

	// 添加404请求
	http.Handle("/404", http.NotFoundHandler())

	server := http.Server{
		Addr:    ":8080",
		Handler: nil, // Handler为nil时，使用defaultServerMux默认的
	}
	slog.Info("服务启动成功,访问地址: http://127.0.0.1" + server.Addr)
	if err := server.ListenAndServe(); err != nil {
		slog.Error(fmt.Sprintf("启动服务失败,原因是:%s", err.Error()))
	}
}
